package br.foton.la.agenda.entity;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;

import br.foton.la.agenda.enums.EnumMarca;

@NamedQueries(value = {
		@NamedQuery(name = Carro.GET_BY_PLACA, query = "select c from Carro c where c.placa = :placa"),
		@NamedQuery(name = Carro.GET_BY_MODELO, query = "select c from Carro c where c.modelo = :modelo"),
		@NamedQuery(name = Carro.GET_BY_MARCA, query = "select c from Carro c where c.marca = :marca"),
		@NamedQuery(name = Carro.GET_BY_COR, query = "select c from Carro c where c.cor = :cor"),
		@NamedQuery(name = Carro.GET_BY_ID_VIAGEM, query = "select c from Carro c where c.viagem.id = :idViagem")})
@Entity
@SequenceGenerator(name="carroGenerator",sequenceName="CARRO_SEQ",allocationSize=1)
public class Carro implements Serializable{
	private static final long serialVersionUID = 1L;
	public static final String GET_BY_PLACA = "Carro.GET_BY_PLACA";
	public static final String GET_BY_MODELO = "Carro.GET_BY_MODELO";
	public static final String GET_BY_MARCA = "Carro.GET_BY_MARCA";
	public static final String GET_BY_COR = "Carro.GET_BY_COR";
	public static final String GET_BY_ID_VIAGEM = "Carro.GET_BY_ID_VIAGEM";
	
	@Id
	@GeneratedValue(generator="carroGenerator",strategy=GenerationType.SEQUENCE)
	private Integer id;
	@Column(nullable = false, length = 10)
	private String placa;
	private EnumMarca marca;
	@Column(nullable = false, length = 20)
	private String modelo;
	@Column(nullable = false, length = 20)
	private String cor;
	private String observacoes;
	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "viagem_id")
	private Viagem viagem;
	
	public Carro(String placa, EnumMarca marca, String modelo, String cor, String observacoes) {
		setPlaca(placa);
		setModelo(modelo);
		setCor(cor);
		setObservacoes(observacoes);
		setMarca(marca);
	}
	
	public Carro(){
		// TODO: 
	}

	@Override
	public String toString() {
		return "Carro [id=" + id + ", placa=" + placa + ", marca=" + marca
				+ ", modelo=" + modelo + ", cor=" + cor + ", observacoes="
				+ observacoes + "]";
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	public EnumMarca getMarca() {
		return marca;
	}

	public void setMarca(EnumMarca marca) {
		this.marca = marca;
	}

	public String getModelo() {
		return modelo;
	}

	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	public String getCor() {
		return cor;
	}

	public void setCor(String cor) {
		this.cor = cor;
	}

	public String getObservacoes() {
		return observacoes;
	}

	public void setObservacoes(String observacoes) {
		this.observacoes = observacoes;
	}

	public Viagem getViagem() {
		return viagem;
	}

	public void setViagem(Viagem viagem) {
		this.viagem = viagem;
	}
	
}
